import os
import logging.config

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 创建 logs 目录
log_dir = os.path.join(BASE_DIR, 'logs')
if not os.path.exists(log_dir):
    os.makedirs(log_dir)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 输出到控制台
            'formatter': 'verbose',
        },
        'file_general': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(log_dir, 'general.log'),
            'formatter': 'verbose',
            'encoding': 'utf-8',
        },
        'file_algorithm': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(log_dir, 'algorithm.log'),
            'formatter': 'verbose',
            'encoding': 'utf-8',
        },
        'file_management': {  # 新增管理模块的日志处理器
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(log_dir, 'management.log'),
            'formatter': 'verbose',
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        # Django 系统日志，将输出到控制台和 general.log 文件
        'django': {
            'handlers': ['file_general', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        # Django 请求日志，将输出到控制台和 general.log 文件
        'django.server': {
            'handlers': ['file_general', 'console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # 自定义日志器，仅记录到 algorithm.log 文件
        'algorithm': {
            'handlers': ['file_algorithm'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # 自定义日志器，仅记录到 management.log 文件
        'management': {
            'handlers': ['file_management'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # logging_utils 日志器，仅记录到 general.log 文件，且不向上级传播
        'logging_utils': {
            'handlers': ['file_general'],
            'level': 'DEBUG',
            'propagate': False,
        },
        # 单独为 'django.utils.autoreload' 设置较高的日志级别
        'django.utils.autoreload': {
            'level': 'WARNING',
            'propagate': False,
        },
        'django.db.backends': {
            'level': 'INFO',
            'propagate': False,
        },
    },
}

def setup_logging():
    logging.config.dictConfig(LOGGING)
